    using System;
using System.Collections;
using System.Collections.Generic;
using ComposicionPedidos;

namespace AdministracionPedidos
{
	/// <summary>
	/// Summary description for ControladorStock.
	/// </summary>
	public class ControladorStock
	{
        private Dictionary<Insumo,int> _listaStock;
        private int cantMinimaStock;

		public ControladorStock(int cantidadMinimaStock,Dictionary<Insumo,int> listaStock)
		{
            _listaStock = new Dictionary<Insumo, int>();
            cantMinimaStock = cantidadMinimaStock;
		}

        public Dictionary<Insumo, int> getListaStock()
        {
            return _listaStock;
        }

        public void setListaStock(Dictionary<Insumo, int> lista)
        {
            _listaStock = lista;
        }

        //Devuelve la lista de insumos con los que no se cuenta para llevar a cabo el pedido.
        public List<Insumo> controlarStock(Dictionary<Insumo, int> insumos)
        {
            Dictionary<Insumo, int> copiaListaStock = _listaStock;
            List<Insumo> listaInsumosFaltantes = new List<Insumo>();

            foreach (KeyValuePair<Insumo, int> tupla in insumos)
            {
                copiaListaStock[tupla.Key] = copiaListaStock[tupla.Key] - tupla.Value;
                
                if (copiaListaStock[tupla.Key] < 0)
                {
                    listaInsumosFaltantes.Add(tupla.Key);
                }
            }
            
            return listaInsumosFaltantes;
        }

        //Devuelva la lista de insumos que se encuentran en estado critico.
        public List<Insumo> descontarStock(Dictionary<Insumo,int> insumos)
        {
            List<Insumo> listaInsumosCriticos = new List<Insumo>();

            foreach (KeyValuePair<Insumo, int> tupla in insumos)
            {
                _listaStock[tupla.Key] = _listaStock[tupla.Key] - tupla.Value;

                if (_listaStock[tupla.Key] < cantMinimaStock)
                {
                    listaInsumosCriticos.Add(tupla.Key);
                }
            }
            return listaInsumosCriticos;
        }

        public int getCantidad(Insumo insumo)
        {
            return _listaStock[insumo];
        }

        private void modificarInsumo(Insumo insumo, int cantidad)
        {

        }

	}
}
